namespace Picnic.Spec
{
	/// <summary>
	/// Describes an interface of validation listener.
	/// </summary>
	public interface ISpecificationValidationListener
	{
		/// <summary>
		/// Called when validation is begin.
		/// </summary>
		void BeginValidation();

		/// <summary>
		/// Called when validation is finished.
		/// </summary>
		void EndValidation(StatementScopeValidationResult result);

		/// <summary>
		/// Called when statement scope validation is begin.
		/// </summary>
		void BeginStatementScopeValidation(StatementScope statementScope);

		/// <summary>
		/// Called when statement scope validation is finished.
		/// </summary>
		void EndStatementScopeValidation(StatementScope statementScope, StatementScopeValidationResult result);

		/// <summary>
		/// Called when statement validation is begin.
		/// </summary>
		void BeginStatementValidation(Statement statement);

		/// <summary>
		/// Called when statement validation is finished.
		/// </summary>
		void EndStatementValidation(Statement statement, StatementValidationResult result);
	}
}